/**
 * gislin 2017年7月12日
 */
package com.btcode.orm.executer;

import com.btcode.db.result.Row;
import com.btcode.db.sqlparameter.PageInfo;
import com.btcode.db.sqlparameter.SQLParameterList;
import com.btcode.orm.filter.IFilter;
import com.btcode.orm.model.IField;
import com.btcode.orm.model.IModel;
import com.btcode.orm.model.ModelPageResult;
import java.util.List;

/**
 * @author gislin 2017年7月12日
 */
public interface IORMExecuter {

    /**
     * 获取model 使用这个方法，model的主键不能为空 通过主键,或者唯一键匹配唯一值 以便发挥缓存功效
     */
    <T extends IModel> T getModel(T model);

    /**
     * 获取model，但不获取关联信息
     */
    <T extends IModel> T getModelWithOutRelation(T model);

    /**
     * 获取model集合 这个方法允许model的主键为空 通过其他属性来匹配
     */
    <T extends IModel> List<T> getModels(T model);

    <T extends IModel> ModelPageResult<T> getModelList(Class<T> modelClass, List<IFilter> whereFilters,PageInfo pageInfo);

    <T extends IModel> ModelPageResult<T> getModelList(Class<T> modelClass, List<IFilter> whereFilters,String orderString,PageInfo pageInfo);

    <T extends IModel> void create(T model);

    <T extends IModel> void creates(List<T> model);

    <T extends IModel> void update(T model);

    <T extends IModel> void delete(T model);

    <T extends IModel> List<T> getModelListSQL(String sql, SQLParameterList pc,
        Class<T> modelClass);

    <T extends IModel> List<Row> converDomain(List<Row> rows, Class<T> modelClass);

    void close();

}
